package com.ztesoft.web.taskgenerator.db.dao.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;

import com.ztesoft.web.taskgenerator.db.arg.DmTaskArg;
import com.ztesoft.web.taskgenerator.db.po.DmTaskPO;

public interface IDmTaskMapper {
	List<Integer> countByArg(DmTaskArg arg);

	int deleteByArg(DmTaskArg arg);

	DmTaskPO changeTime(Integer dmPlanId);

	List<DmTaskPO> selectByArg(DmTaskArg arg);
	
	List<DmTaskPO> selectByParentTaskId(Integer dmPlanId);

	DmTaskPO getOneBydmPlanId(Integer dmPlanId);

	DmTaskPO isStarted(DmTaskPO dtPO);

	DmTaskPO hasCreated(DmTaskPO dtPO);

	/**
	 * 更新任务结果恢复明细记录状态
	 * @param record
	 * @param arg
	 * @return
	 */
	int updateRD(@Param("tableName")String tableName, @Param("stateDate")String stateDate, @Param("dmDetailId")String dmDetailId);
	
	/**
	 * 更新任务结果恢复明细记录状态--失败
	 * @param record
	 * @param arg
	 * @return
	 */
	int updateRDError(@Param("tableName")String tableName,@Param("stateDate")String stateDate,@Param("dmDetailId")String dmDetailId);
	
	int updateByArgSelective(@Param("record") DmTaskPO record, @Param("arg") DmTaskArg arg);

	int updateByArg(@Param("record") DmTaskPO record, @Param("arg") DmTaskArg arg);

	List<DmTaskPO> selectByArgAndPage(DmTaskArg arg, RowBounds rowBound);

	/**
	 * 数据恢复界面
	 * 
	 * @param arg
	 * @param rowBound
	 * @return
	 */
	List<DmTaskPO> queryRecordByPageForDataRecovery(DmTaskPO record, RowBounds rowBound);

	int insert(DmTaskPO record);

	int insertSelective(DmTaskPO record);

	int insertBatch(@Param("list") List<DmTaskPO> records);

	int deleteByPrimaryKey(Integer id);

	// 删除DmTask表里状态为00T的记录
	int delete00T(Integer id);

	DmTaskPO selectByPrimaryKey(Integer id);

	int updateByPrimaryKeySelective(DmTaskPO record);

	int updateByPrimaryKey(DmTaskPO record);

	List<DmTaskPO> selectByDmTaskInfo(@Param("dmPlanId") Integer dmPlanId, @Param("groupNbr") Integer groupNbr);

	int selectExistTableName(@Param("tableName") String tableName, @Param("tableSchema") String tableSchema);

	/**
	 * 创建任务结果恢复明细表
	 * @param tableName
	 * @return
	 */
	int addCreateRDmTable(@Param("tableName") String tableName);
	
	/**
	 * 将任务结果明细表的数据移动到任务结果恢复明细表
	 * @param tableName
	 * @return
	 */
	int addRDmTableDate(@Param("tableName") String tableName);
	
	int addCreateDmTable(@Param("tableName") String tableName, @Param("sourceTableName")String sourceTableName);

	List<DmTaskPO> selectByNeedSubtask();

	int updateByNeedSubTask(Integer dmPlanId);

	List<DmTaskPO> getBusDmTaskPO();

	List<DmTaskPO> getNotBusDmTaskPO();

	List<DmTaskPO> selectTaskPOByPlanIdStart(Integer dmPlanId);

	List<DmTaskPO> selectTaskPOByPlanIdPause(Integer dmPlanId);

	List<DmTaskPO> selectTaskPOByPlanIdCancle(Integer dmPlanId);

	List<DmTaskPO> selectTaskForCreateHandTask(@Param("priority") Integer priority, @Param("dmPlanId") Integer dmPlanId, @Param("dmTaskId") Integer dmTaskId);

	List<DmTaskPO> selectEditTask(@Param("priority") Integer priority, @Param("dmPlanId") Integer dmPlanId);

	// 查询该计划是否满足删除条件
	List<DmTaskPO> selectBydmPlanId(Integer dmPlanId);

	int updateTaskById(@Param("state") String state, @Param("dmTaskId") Integer dmTaskId);

	int updateTaskById_(@Param("isCheck") Integer isCheck, @Param("dmTaskId") Integer dmTaskId);

	List<DmTaskPO> selectByTaskInfoNotState(@Param("dmPlanId") Integer dmPlanId, @Param("groupNbr") Integer groupNbr);

	int updateTask_(@Param("isCheck") int isCheck, @Param("taskIdArr") int[] taskIdArr);
}